﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++)
//	{
//		打印上层n
//		先打印空格
//		for (int j = 0; j < n-i; j++)
//		{
//			printf(" ");
//		}
//		在打印*
//		for (int j = 0; j < 2*i+1; j++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	for (int i = 0; i < n+1; i++)
//	{
//		打印下层n+1
//		先打印空格
//		for (int j = 0; j < i; j++)
//		{
//			printf(" ");
//		}
//		在打印*
//		for (int j = 0; j < 2*(n+1-i); j++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	return 0;
//}*/


//水仙花数问题
//#include <math.h>
//int main()
//{
//
//	for (int i = 0; i < 100000; i++)
//	{
//		int tep = 0;
//		int n = 1;//任何数都是至少有1位
//		int sum = 0;
//		tep = i;
//		while (tep/10)//  153  1.n=2 && tep=15 2.n=3 &&tep=1  
//		{
//			n++;
//			tep /= 10;
//		}
//		//求出这个数的位数
//		//此时tep=0；
//		tep = i;
//		while (tep)//153 3 -5-1 
//		{
//			sum += pow(tep % 10, n);
//			tep /= 10;
//		}
//		if (sum == i)
//		{
//			printf("%d ", i);
//	     }
//
//		
//	}
//	return 0;
//}

//递归实现n的k次方
//double Fib(int n,int k)
//{
//	if (k == 0)
//	{
//		return 1;
//	}
//	else if (k > 0)
//	{
//		return n * Fib(n, k - 1);
//	}
//	else
//		return  1 / Fib(n, -k);
//
//}
//int main()
//{
//	int n = 0;
//	int k = 0;
//	scanf("%d %d", &n,&k);
//	double ret=Fib(n,k);
//	printf("%.2lf\n", ret);
//	return 0;
//}

//有一个数字矩阵，矩阵的每行从左到右是递增的，
//矩阵从上到下是递增的，请编写程序在这样的矩阵中查找某个数字是否存在。
//1 2 3
//4 5 6
//7 8 9
//int Find_num(int arr[3][3], int r, int c, int k)
//{
//	int x = 0;//行下标         右上角  拿右上角的元素和你要找的元素进行比较即可
//	int y = c - 1;//列下标 
//	while(x<=r-1 && y>=0)
//	{ 
//		if (k < arr[x][y])
//		{
//			y--;//最后一列就不找了
//		}
//		else if (k > arr[x][y])
//		{
//			x++;//第一行就不找了
//		}
//		else
//		{
//			return 1;
//		}
//	}
//	return 0; //找不到了
//
//}
//int main()
//{
//	int k = 0;
//	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
//	scanf("%d", &k);//要找的数字
//	int ret=Find_num(arr, 3, 3, k);
//	printf("%d\n", ret);
//	return 0;
//}


//struct Point
//{
//	int x;
//	int y;
//};
//
//struct Point Find_num(int arr[3][3], int r, int c, int k)
//{
//	int x = 0;//行下标         右上角  拿右上角的元素和你要找的元素进行比较即可
//	int y = c - 1;//列下标 
//	struct Point p = { -1,-1 };
//	while (x <= r - 1 && y >= 0)
//	{
//		if (k < arr[x][y])
//		{
//			y--;//最后一列就不找了
//		}
//		else if (k > arr[x][y])
//		{
//			x++;//第一行就不找了
//		}
//		else
//		{
//			p.x = x;//将计算得x赋给结构体变量里的成员
//			p.y = y;//将计算得y赋给结构体变量里的成员
//			return p;
//		}
//	}
//	return p; //找不到了
//
//}
//int main()
//{
//	int k = 0;
//	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
//	while (~scanf("%d", &k))//要找的数字)
//	{
//	
//		struct Point ret = Find_num(arr, 3, 3, k);
//		printf("%d %d\n", ret.x,ret.y);
//	}
//	return 0;
//}


//
//int Find_num(int arr[3][3], int *px, int *py, int k)
//{
//	int x = 0;//行下标         右上角  拿右上角的元素和你要找的元素进行比较即可
//	int y = *py- 1;//列下标 
//	while(x<=*px-1 && y>=0)
//	{ 
//		if (k < arr[x][y])
//		{
//			y--;//最后一列就不找了
//		}
//		else if (k > arr[x][y])
//		{
//			x++;//第一行就不找了
//		}
//		else
//		{
//			*px = x;
//			*py = y;
//			return 1;
//		}
//	}
//	*px = -1;
//	*py = -1;
//	return 0; //找不到了
//
//}
//int main()
//{
//	int k = 0;
//	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
//	while (~scanf("%d", &k))//要找的数字)
//	{
//		int x = 3;//3行
//		int y = 3;//3列
//		int ret = Find_num(arr, &x, &y, k);
//		if (ret == 1)
//		{
//			printf("%d %d\n", x, y);
//	    }
//		else
//		{
//			printf("找不到\n");
//		}
//	}
//	return 0;
//}


//int main()
//{
//	int a = 10;//1010   
//	printf("%d\n", a >>1);
//	return 0;
//}

//编写代码将13⼆进制序列的第5位修改为1，然后再改回0 ?
// 0001 1101
int main()
{
	int n = 0;
	scanf("%d", &n);	// 13  0000 1101 
	//移到
	n = n | (1 << 4);  // 0000 1101 | 0001 0000==0001 1101
	printf("%d\n", n);
	//复原
//   0001 1101 变成 0000 1101
//   按位与1110 1111 即可   怎么变呢  1的二进制是  0000 0001 
// 
// 
// 
// 2左移4位 0001 0000然后取反 1110 1111
	n = n & ~(1 << 4);
	printf("%d\n", n);
	return 0;
}